package com.zijing2333.adaptivescheduling.SwitcherManager.flow;

import android.util.Log;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

//一共有三种情况：一是携带数据：客户端发送到服务端去
//            二是通知类型，不携带数据：服务端发送到客户端去 但是又分为关键节点的通知：收到该通知后才能进行
//            三是通知类型，不携带数据：服务端发送到客户端去 但是普通节点的通知：客户端收到该通知后要进行状态的获取，然后将状态值发给服务端


public class StringDataFlow implements ISocketDataFlow<String> {
    private static final String TAG = "fun_StringDataFlow";

    private final int MIGRATION_DATA = 1; //携带服务的状态数据
    private final int NOTICE = 2; //通知  对端接收后还需要对是否是关键节点进行判断

    private final int MIGRATION_IP = 3; //携带源ip地址
    @Override
    public void write(DataOutputStream dos, String ServiceId,String type,String data) {
        try {
            if ("1".equals(type)){
                dos.writeInt(MIGRATION_DATA); //这个是区别发送通知和数据的变量
                dos.writeUTF(ServiceId);
                dos.writeUTF(data);
            }else if ("2".equals(type)){
                dos.writeInt(NOTICE); //这个是区别发送通知和数据的变量
                dos.writeUTF(ServiceId);
            }else if ("3".equals(type)){
                dos.writeInt(MIGRATION_IP); //这个是区别发送通知和数据的变量
                dos.writeUTF(ServiceId);
                dos.writeUTF(data);
            }
            dos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public String read(DataInputStream dis) { //读类型一般放在ClientConnectServerThread中
        String result = null;
        try {
            result = dis.readUTF();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
}
